package XML解析技术;
/**
 *      document 对象表示的是整个文档（可以是 html 文档，也可以是 xml 文档）
 *      早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax 简介（已经过时，但我们需要知道这两种技术）
 */

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;

public class DomeTest {

    /**
     * 第一步：先创建一个SaxReader输入流，去读取 xml 文件，并生成 Document 对象
     */
    @Test
    public void test1()  {
        try {
            SAXReader saxReader=new SAXReader();
            Document document = saxReader.read("src/books1.xml");
            System.out.println(document);
        } catch (DocumentException e) {
            e.printStackTrace();
        }

    }

    /**
     * 第二步：读取books1.xml文件，生成books1类
     */
    @Test
    public void test2() throws Exception {
        // 第一步： 先加载 xml 文件创建 Document 对象
        SAXReader saxReader=new SAXReader();
        // 第二步：通过 Document 对象拿到根元素对象
        Document doc = saxReader.read("src/books1.xml");
        // 第三步：通过根元素.elelemts(标签名); 可以返回一个集合，这个集合里放着。所有你指定的标签名的元素对象
            /** getRootElement()：获取xml文件地根元素，并返回一个element对象 */
        Element rootElement = doc.getRootElement();
        //System.out.println(rootElement);
            /** elements()：通过标签名，查找子元素 */
        List<Element> books = rootElement.elements("book");


        for (Element book : books) {
            /** Element.asXML(): 它将当前元素转换成为 String 对象 */
//            System.out.println(book.asXML());
//            System.out.println("--------------------------------");

            /** elementText(): 它将当前元素转换成为 String 对象 */
//            System.out.println(book.elementText("name"));
//            System.out.println("--------------------------------");

            /** getText(): 它将当前元素转换成为 String 对象 */
//            String bookText = book.element("name").getText();
//            System.out.println(bookText);
//            System.out.println("--------------------------------");

            String nameElementText = book.elementText("name");
            String priceElementText = book.elementText("price");
            String authorElementText = book.elementText("author");
            /** attributeValue():获取当前元素中某个属性的值 */
            String snValue = book.attributeValue("sn");

            //将获取的数据封装到对象中
            /** Double.parseDouble():将String数据转换为Double类型数据 */
            System.out.println(new books1(snValue, nameElementText, Double.parseDouble(priceElementText), authorElementText));


        }
        // 第四步：找到你想要修改、删除的子元素，进行相应在的操作
        
        // 第五步，保存到硬盘上
    }
}
